package com.school.entity;

import java.util.ArrayList;
import java.util.List;

/**
 * 子类：学生，继承自 Person 类
 * 扩展学生个性化属性（所选课程列表）与方法（选课、退课、打印课表）
 */
public class Student extends Person {
    // 学生个性化属性：所选课程列表（private 保护，仅本类可见）
    private List<Course> selectedCourses;

    // 子类构造方法：通过 super() 调用父类构造方法，初始化父类属性
    public Student(String id, String name, String gender) {
        // super() 必须放在子类构造方法第一行，传入父类所需参数
        super(id, name, gender);
        // 初始化子类自己的属性
        this.selectedCourses = new ArrayList<>();
    }

    // 学生个性化方法：选课
    public void selectCourse(Course course) {
        if (course != null && !selectedCourses.contains(course)) {
            selectedCourses.add(course);
            System.out.println(name + "（学号：" + getId() + "）选了《" + course.getCourseName() + "》课程");
        }
    }

    // 学生个性化方法：退课
    public void dropCourse(Course course) {
        if (course != null && selectedCourses.remove(course)) {
            System.out.println(name + "（学号：" + getId() + "）退了《" + course.getCourseName() + "》课程");
        } else {
            System.out.println(name + "（学号：" + getId() + "）未选《" + course.getCourseName() + "》课程，无法退课");
        }
    }

    // 重写父类方法：打印学生课表（个性化实现）
    @Override
    public void printWorksheet() {
        // 调用父类 printWorksheet()，复用“打印基础信息”逻辑
        super.printWorksheet();
        // 扩展子类个性化逻辑：打印选课信息
        System.out.println("=== 学生课表 ===");
        if (selectedCourses.isEmpty()) {
            System.out.println("当前未选任何课程");
        } else {
            for (Course course : selectedCourses) {
                System.out.println("课程名称：" + course.getCourseName() +
                        " | 上课地点：" + course.getLocation() +
                        " | 时间：" + course.getTime() +
                        " | 授课教师：" + course.getTeacher().getName());
            }
        }
        System.out.println("================\n");
    }

    // Getter：供外部访问所选课程列表（private 属性的访问入口）
    public List<Course> getSelectedCourses() {
        return selectedCourses;
    }
}
